	package ww;

	public class J22_privateConstructor {
		 
		// privaate으로 선언된 생성자
		// 일반적으로 모든 생성자는 public 이어야 함
		// 클래스에 대한 객체를 생성하려면
		// 반드시 필요한 것이 생성자이기 떄문임
		
		// 하지만, 어떤 생성자는 private 으로 만들어서 
		// 그들의 클래스가 객체화되지 
		// 못하게 하는 경우도 있음
		// private 생성자를 사용한 클래스를
		// singleton 클래스라 부름
		
		// 생성자는 private으로 선언
		// 객체변수는 private static 으로 선언해서
		// 클래스의 객체를 메서드를 통해 접근 가능
		
		public static void main(String[] args) {
		/*  Singleton one = new Singleton();
		  Singleton two = new Singleton();
		  Singleton three = new Singleton();*/
			Singleton one = Singleton.newInstance();
			Singleton two = Singleton.newInstance();
			Singleton three = Singleton.newInstance();
		}

	}
class Singleton {
		
		private static Singleton object = null;
		// object 는 static 으로 선언되었기 떄문에
		// 단 하나의 객체만 생성가능
		// 일반적인 생성자
		private Singleton() {
			 System.out.println("객체가 하나 생성됨");
			 
			} 	// 특수한 생성자
		
		/*public static Singleton newInstance(){
			Singleton object = new Singleton();
			return object;
			}*/ // 생성자는 일반메서드는 일반메서드를 통해 호출
		public static Singleton newInstance(){
			if(object == null) object = new Singleton();
			// 객체가 만들어지지 않았다면 (object == null)
			// 객체를 하나 생성함 (new Singleton)
			return object; 
		}	
	}
